/*
排序不等式
a升序，b降序
看清真正的答案ai*bi*(n-j+1)*j j为原ai的下标
不能最后计算(n-j+1)*j因为利用排序不等式已经算出来了最小值，然后还要乘(n-j+1)*j，此时就不一定最小了。
*/
#include<bits/stdc++.h>
using namespace std;
#define P (998244353)
long long b[202020],a[202020];
inline bool cmp(long long a,long long b){
    return a>b;
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%lld",&a[i]);
        a[i]*=1LL*(n-i+1)*i;
    }
    for(int i=1;i<=n;i++)
        scanf("%lld",&b[i]);
    sort(a+1,a+1+n);
    sort(b+1,b+1+n,cmp);
    long long ans=0;
    for(int i=1;i<=n;i++)
        ans=(ans+(a[i]%P)*b[i])%P;
    printf("%lld",ans);
    return 0;
}